
08.08.2014, 23:02
|
Интересующийся
|
|
Регистрация: 08.08.2014
Сообщений: 25
|
|
Нужна помощь с AJAX
Привет,суть такая есть туристический сайт на вордпресс, в базу заносятся данные, все сохраняется, все ок.
Есть файл js, в котором ведется просчет данных из базы. Все работает хорошо, если задать данные из переменных, но у меня не получается вытащить данные из базы. Помогите, пожалуйста разобраться.
Нужно вместо переменных из файла выводить данные из базы (json)
Вот php, который передает значения в js (файл во вложении)
function accommodation_get_price_request() {
if ( isset($_REQUEST) ) {
$nonce = $_REQUEST['nonce'];
if ( wp_verify_nonce( $nonce, 'byt-ajax-nonce' ) ) {
$accommodation_id = wp_kses($_REQUEST['accommodationId'], '');
$room_type_id = wp_kses($_REQUEST['roomTypeId'], '');
$dateValue = wp_kses($_REQUEST['dateValue'], '');
$dateTime = strtotime($dateValue);
$dateValue = date('Y-m-d', $dateTime);
$price_decimal_places = (int)of_get_option('price_decimal_places', 0);
if ($accommodation_id > 0) {
$price_per_day = number_format (get_accommodation_price($dateValue, $accommodation_id, $room_type_id, false), $price_decimal_places, ".", "");
$child_price = number_format (get_accommodation_price($dateValue, $accommodation_id, $room_type_id, true), $price_decimal_places, ".", "");
$price_per_day_dop1 = number_format (get_accommodation_price($dateValue, $accommodation_id, $room_type_id, false), $price_decimal_places, ".", "");
$price_per_day_dop2 = number_format (get_accommodation_price($dateValue, $accommodation_id, $room_type_id, false), $price_decimal_places, ".", "");
$price_per_day_dop3 = number_format (get_accommodation_price($dateValue, $accommodation_id, $room_type_id, false), $price_decimal_places, ".", "");
$price_per_day_dop4 = number_format (get_accommodation_price($dateValue, $accommodation_id, $room_type_id, false), $price_decimal_places, ".", "");
$price_per_day_dop5 = number_format (get_accommodation_price($dateValue, $accommodation_id, $room_type_id, false), $price_decimal_places, ".", "");
$prices = array(
'price_per_day' => $price_per_day,
'child_price' => $child_price,
'price_per_day_dop1' => $price_per_day_dop1,
'price_per_day_dop2' => $price_per_day_dop2,
'price_per_day_dop3' => $price_per_day_dop3,
'price_per_day_dop4' => $price_per_day_dop4,
'price_per_day_dop5' => $price_per_day_dop5
);
echo json_encode($prices);
}
}
}
die();
}
если в начале скрипта
var price_per_day_dop1 = 0; // Стоимость доп. 1 взрослого
var price_per_day_dop2 = 0; // Стоимость доп. 2 взрослого
var price_per_day_dop3 = 0; // Стоимость доп. 3 взрослого
var price_per_day_dop4 = 0; // Стоимость доп. 4 взрослого
var price_per_day_dop5 = 0; // Стоимость доп. 5 взрослого
заменить на
var price_per_day_dop1 = parseFloat(prices.price_per_day_dop1);
var price_per_day_dop2 = parseFloat(prices.price_per_day_dop2);
var price_per_day_dop3 = parseFloat(prices.price_per_day_dop3);
var price_per_day_dop4 = parseFloat(prices.price_per_day_dop4);
var price_per_day_dop5 = parseFloat(prices.price_per_day_dop5);
то скрипт не работает, а без этого значения переменных не передать. подскажите, пожалуйста, как сделать.
Последний раз редактировалось Sergio022, 08.08.2014 в 23:30.
|
|

08.08.2014, 23:04
|
Интересующийся
|
|
Регистрация: 08.08.2014
Сообщений: 25
|
|
Извиняюсь, что может быть как-то непонятно и сумбурно обозначил задачу. Суть такая, что скрипт работает, если берутся значения из заранее указанных переменных, а json не присваеваются
|
|

09.08.2014, 00:09
|
Интересующийся
|
|
Регистрация: 08.08.2014
Сообщений: 25
|
|
Rise,
Так работает
var price_per_day_dop1 = 5; // Стоимость доп. 1 взрослого
var price_per_day_dop2 = 4; // Стоимость доп. 2 взрослого
var price_per_day_dop3 = 3; // Стоимость доп. 3 взрослого
var price_per_day_dop4 = 2; // Стоимость доп. 4 взрослого
var price_per_day_dop5 = 1; // Стоимость доп. 5 взрослого
Так не работает
var price_per_day_dop1 = parseFloat(prices.price_per_day_dop1);
var price_per_day_dop2 = parseFloat(prices.price_per_day_dop2);
var price_per_day_dop3 = parseFloat(prices.price_per_day_dop3);
var price_per_day_dop4 = parseFloat(prices.price_per_day_dop4);
var price_per_day_dop5 = parseFloat(prices.price_per_day_dop5);
Не пойму, как заставить получать значения переменных через JSON.
Есть условие в начале скрипта, если откроете
if (price_per_day_dop1 !=0) price_per_day_dop1_count = 1;
else price_per_day_dop1_count = 0;
if (price_per_day_dop2 !=0) price_per_day_dop2_count = 1;
else price_per_day_dop2_count = 0;
if (price_per_day_dop3 !=0) price_per_day_dop3_count = 1;
else price_per_day_dop3_count = 0;
if (price_per_day_dop4 !=0) price_per_day_dop4_count = 1;
else price_per_day_dop4_count = 0;
if (price_per_day_dop5 !=0) price_per_day_dop5_count = 1;
else price_per_day_dop5_count = 0;
var dop_adult_count = price_per_day_dop1_count+price_per_day_dop2_count+price_per_day_dop3_count+price_per_day_dop4_count+price_per_day_dop5_count;
Оно не исполняется, так как сам аякс ниже находится. Если условия вставляю сюда
jq.ajax({
url: BYTAjax.ajaxurl,
data: dataObj,
dataType: 'json',
success:function(prices) {
var tableRow = '';
то не работает.
jq.ajax({
url: BYTAjax.ajaxurl,
data: dataObj,
dataType: 'json',
success:function(prices) {
var tableRow = '';
// This outputs the result of the ajax request
window.rateTableRowIndex++;
var pricePerDay = parseFloat(prices.price_per_day);
var pricePerChild = 0;
price_per_day_dop1 = parseFloat(prices.price_per_day_dop1);
price_per_day_dop2 = parseFloat(prices.price_per_day_dop2);
price_per_day_dop3 = parseFloat(prices.price_per_day_dop3);
price_per_day_dop4 = parseFloat(prices.price_per_day_dop4);
price_per_day_dop5 = parseFloat(prices.price_per_day_dop5);
// Определяем количество доп взрослых
if (price_per_day_dop1 !=0) price_per_day_dop1_count = 1;
else price_per_day_dop1_count = 0;
if (price_per_day_dop2 !=0) price_per_day_dop2_count = 1;
else price_per_day_dop2_count = 0;
if (price_per_day_dop3 !=0) price_per_day_dop3_count = 1;
else price_per_day_dop3_count = 0;
if (price_per_day_dop4 !=0) price_per_day_dop4_count = 1;
else price_per_day_dop4_count = 0;
if (price_per_day_dop5 !=0) price_per_day_dop5_count = 1;
else price_per_day_dop5_count = 0;
var dop_adult_count = price_per_day_dop1_count+price_per_day_dop2_count+price_per_day_dop3_count+price_per_day_dop4_count+price_per_day_dop5_count;
// Определяем количество доп детей
if (price_per_day_child_dop1 !=0) price_per_day_child_dop1_count = 1;
else price_per_day_dop1_count = 0;
if (price_per_day_child_dop2 !=0) price_per_day_child_dop2_count = 1;
else price_per_day_child_dop2_count = 0;
if (price_per_day_child_dop3 !=0) price_per_day_child_dop3_count = 1;
else price_per_day_child_dop3_count = 0;
if (price_per_day_child_dop4 !=0) price_per_day_child_dop4_count = 1;
else price_per_day_child_dop4_count = 0;
if (price_per_day_child_dop5 !=0) price_per_day_child_dop5_count = 1;
else price_per_day_child_dop5_count = 0;
//Определяем кол-во доп детей
dop_child_count = price_per_day_child_dop1_count+price_per_day_child_dop2_count+price_per_day_child_dop3_count+price_per_day_child_dop4_count+price_per_day_child_dop5_count;
//Определяем итоговую сумму за доп детей и взрослых
dop_adult_price = price_per_day_dop1+price_per_day_dop2+price_per_day_dop3+price_per_day_dop4+price_per_day_dop5;
dop_child_price = price_per_day_child_dop1+price_per_day_child_dop2+price_per_day_child_dop3+price_per_day_child_dop4+price_per_day_child_dop5;
tableRow += '<tr>';
tableRow += '<td>' + dateValue + '</td>';
//вывод таблицы со стоимостью
if (window.accommodationIsPricePerPerson) {
pricePerChild = parseFloat(prices.child_price);
tableRow += '<td>' + adults + '</td>';
tableRow += '<td>' + window.currencySymbol + pricePerDay + '</td>';
tableRow += '<td>' + children + (window.accommodationCountChildrenStayFree > 0 ? ' *' : '') + '</td>';
tableRow += '<td>' + window.currencySymbol + pricePerChild + '</td>';
}
if (window.accommodationIsPricePerPerson) {
children = children - window.accommodationCountChildrenStayFree;
children = children >= 0 ? children : 0;
if (adults <= max_count) dop_adult_price=0;
if ((adults-max_count)==1) dop_adult_price=price_per_day_dop1;
if ((adults-max_count)==2) dop_adult_price=price_per_day_dop1+price_per_day_dop2;
if ((adults-max_count)==3) dop_adult_price=price_per_day_dop1+price_per_day_dop2+price_per_day_dop3;
if ((adults-max_count)==4) dop_adult_price=price_per_day_dop1+price_per_day_dop2+price_per_day_dop3+price_per_day_dop4;
if ((adults-max_count)==5) dop_adult_price=price_per_day_dop1+price_per_day_dop2+price_per_day_dop3+price_per_day_dop4+price_per_day_dop5;
alert (dop_adult_price);
алерт выдает ноль, а должен выдавать сумму равную 150 = (10+20+30+40+50)
Последний раз редактировалось Sergio022, 09.08.2014 в 00:16.
|
|

09.08.2014, 00:37
|
Интересующийся
|
|
Регистрация: 08.08.2014
Сообщений: 25
|
|
Rise,
В приведенном коде выше я так и сделал, но alert (dop_adult_price); выдает 0
Значения переменных в php
$price_per_day_dop1=10;
$price_per_day_dop2=20;
$price_per_day_dop3=30;
$price_per_day_dop4=40;
$price_per_day_dop5=50;
php
$prices = array(
'price_per_day' => $price_per_day,
'child_price' => $child_price,
'price_per_day_dop1' => $price_per_day_dop1,
'price_per_day_dop2' => $price_per_day_dop2,
'price_per_day_dop3' => $price_per_day_dop3,
'price_per_day_dop4' => $price_per_day_dop4,
'price_per_day_dop5' => $price_per_day_dop5
);
echo json_encode($prices);
}
}
}
die();
}
Причем, если а скрипте написать alert ($price_per_day_dop1); выведется 10, как и нужно
Последний раз редактировалось Sergio022, 09.08.2014 в 00:41.
|
|

09.08.2014, 11:57
|
Интересующийся
|
|
Регистрация: 08.08.2014
Сообщений: 25
|
|
Rise, спасибо, что помогаете разобраться.
alert(prices); вернул ноль
в таком случае что не так может быть?
Только вот получается странно, если prices = 0, то prices.price_per_day_child_dop1 почему = 10?
|
|

09.08.2014, 13:47
|
Интересующийся
|
|
Регистрация: 08.08.2014
Сообщений: 25
|
|
alert(prices.price_per_day_child_dop1);
при
$price_per_day_dop1=10;
в PHP
Это я к тому, что если prices пустой, то почему значения внутри него передаются правильно?
Последний раз редактировалось Sergio022, 09.08.2014 в 13:51.
|
|

09.08.2014, 14:12
|
Интересующийся
|
|
Регистрация: 08.08.2014
Сообщений: 25
|
|
alert(prices); // [object Object]
alert(prices.price_per_day_child_dop1); // undifined
в этом коде
var jq = jQuery.noConflict();
//Переменные, которые работают если без аякса
var max_count = 0; // Кол-во взрослых по одинаковой цене
var max_child_count = 0; // Кол-во взрослых по одинаковой цене
var max_adult_count = 0; //Макс кол-во взрослых (с учетом доп)
var max_total_child_count = 0; //Макс кол-во детей (с учетом доп)
var price_per_day_dop1 = 0; // Стоимость доп. 1 взрослого
var price_per_day_dop2 = 0; // Стоимость доп. 2 взрослого
var price_per_day_dop3 = 0; // Стоимость доп. 3 взрослого
var price_per_day_dop4 = 0; // Стоимость доп. 4 взрослого
var price_per_day_dop5 = 0; // Стоимость доп. 5 взрослого
var price_per_day_dop1_count = 0; // Счетчик доп взрослых (выводить, или нет)
var price_per_day_dop1_count = 0; // Счетчик доп взрослых (выводить, или нет)
var price_per_day_dop1_count = 0; // Счетчик доп взрослых (выводить, или нет)
var price_per_day_dop1_count = 0; // Счетчик доп взрослых (выводить, или нет)
var price_per_day_dop1_count = 0; // Счетчик доп взрослых (выводить, или нет)
var price_per_day_child_dop1 = 0; // Стоимость доп. 1 ребенка
var price_per_day_child_dop2 = 0; // Стоимость доп. 1 ребенка
var price_per_day_child_dop3 = 0; // Стоимость доп. 1 ребенка
var price_per_day_child_dop4 = 0; // Стоимость доп. 1 ребенка
var price_per_day_child_dop5 = 0; // Стоимость доп. 1 ребенка
var price_per_day_child_dop1_count = 0; // Счетчик доп ребенка (выводить, или нет)
var price_per_day_child_dop2_count = 0; // Счетчик доп ребенка (выводить, или нет)
var price_per_day_child_dop3_count = 0; // Счетчик доп ребенка (выводить, или нет)
var price_per_day_child_dop4_count = 0; // Счетчик доп ребенка (выводить, или нет)
var price_per_day_child_dop5_count = 0; // Счетчик доп ребенка (выводить, или нет)
var dop_adult_count = 0; // Всего доп взрослых
var dop_child_count = 0; // Всего доп детей
var dop_adult_price = 0; // Стоимость доп взрослого
var dop_child_price = 0; // Стоимость доп детей
var dop_price = 0; // Общая прибавочная стоимость (доп дети+доп все взрослые)
var min_adults_in_acc = 3; //Минимальное количество взрослых в комнате, меньше которых заказывать нельзя
//Просчет заказа
jq.ajax({
url: BYTAjax.ajaxurl,
data: dataObj,
dataType: 'json',
success:function(prices) {
var tableRow = '';
// This outputs the result of the ajax request
window.rateTableRowIndex++;
var pricePerDay = parseFloat(prices.price_per_day);
var pricePerChild = 0;
price_per_day_dop1 = parseFloat(prices.price_per_day_dop1);
price_per_day_dop2 = parseFloat(prices.price_per_day_dop2);
price_per_day_dop3 = parseFloat(prices.price_per_day_dop3);
price_per_day_dop4 = parseFloat(prices.price_per_day_dop4);
price_per_day_dop5 = parseFloat(prices.price_per_day_dop5);
// Определяем количество доп взрослых
if (price_per_day_dop1 !=0) price_per_day_dop1_count = 1;
else price_per_day_dop1_count = 0;
if (price_per_day_dop2 !=0) price_per_day_dop2_count = 1;
else price_per_day_dop2_count = 0;
if (price_per_day_dop3 !=0) price_per_day_dop3_count = 1;
else price_per_day_dop3_count = 0;
if (price_per_day_dop4 !=0) price_per_day_dop4_count = 1;
else price_per_day_dop4_count = 0;
if (price_per_day_dop5 !=0) price_per_day_dop5_count = 1;
else price_per_day_dop5_count = 0;
var dop_adult_count = price_per_day_dop1_count+price_per_day_dop2_count+price_per_day_dop3_count+price_per_day_dop4_count+price_per_day_dop5_count;
// Определяем количество доп детей
if (price_per_day_child_dop1 !=0) price_per_day_child_dop1_count = 1;
else price_per_day_dop1_count = 0;
if (price_per_day_child_dop2 !=0) price_per_day_child_dop2_count = 1;
else price_per_day_child_dop2_count = 0;
if (price_per_day_child_dop3 !=0) price_per_day_child_dop3_count = 1;
else price_per_day_child_dop3_count = 0;
if (price_per_day_child_dop4 !=0) price_per_day_child_dop4_count = 1;
else price_per_day_child_dop4_count = 0;
if (price_per_day_child_dop5 !=0) price_per_day_child_dop5_count = 1;
else price_per_day_child_dop5_count = 0;
//Определяем кол-во доп детей
dop_child_count = price_per_day_child_dop1_count+price_per_day_child_dop2_count+price_per_day_child_dop3_count+price_per_day_child_dop4_count+price_per_day_child_dop5_count;
//Определяем итоговую сумму за доп детей и взрослых
dop_adult_price = price_per_day_dop1+price_per_day_dop2+price_per_day_dop3+price_per_day_dop4+price_per_day_dop5;
dop_child_price = price_per_day_child_dop1+price_per_day_child_dop2+price_per_day_child_dop3+price_per_day_child_dop4+price_per_day_child_dop5;
tableRow += '<tr>';
tableRow += '<td>' + dateValue + '</td>';
//вывод таблицы со стоимостью
if (window.accommodationIsPricePerPerson) {
pricePerChild = parseFloat(prices.child_price);
tableRow += '<td>' + adults + '</td>';
tableRow += '<td>' + window.currencySymbol + pricePerDay + '</td>';
tableRow += '<td>' + children + (window.accommodationCountChildrenStayFree > 0 ? ' *' : '') + '</td>';
tableRow += '<td>' + window.currencySymbol + pricePerChild + '</td>';
}
if (window.accommodationIsPricePerPerson) {
children = children - window.accommodationCountChildrenStayFree;
children = children >= 0 ? children : 0;
if (adults <= max_count) dop_adult_price=0;
if ((adults-max_count)==1) dop_adult_price=price_per_day_dop1;
if ((adults-max_count)==2) dop_adult_price=price_per_day_dop1+price_per_day_dop2;
if ((adults-max_count)==3) dop_adult_price=price_per_day_dop1+price_per_day_dop2+price_per_day_dop3;
if ((adults-max_count)==4) dop_adult_price=price_per_day_dop1+price_per_day_dop2+price_per_day_dop3+price_per_day_dop4;
if ((adults-max_count)==5) dop_adult_price=price_per_day_dop1+price_per_day_dop2+price_per_day_dop3+price_per_day_dop4+price_per_day_dop5;
alert(prices);
alert(prices.price_per_day_child_dop1);
if (children <= max_child_count) dop_child_price=0;
if ((children-max_child_count)==1) dop_child_price=price_per_day_child_dop1;
if ((children-max_child_count)==2) dop_child_price=price_per_day_child_dop1+price_per_day_child_dop2;
if ((children-max_child_count)==3) dop_child_price=price_per_day_child_dop1+price_per_day_child_dop2+price_per_day_child_dop3;
if ((children-max_child_count)==4) dop_child_price=price_per_day_child_dop1+price_per_day_child_dop2+price_per_day_child_dop3+price_per_day_child_dop4;
if ((children-max_child_count)==5) dop_child_price=price_per_day_child_dop1+price_per_day_child_dop2+price_per_day_child_dop3+price_per_day_child_dop4+price_per_day_child_dop5;
if (children <= max_child_count) one_price_child_sellected=children;
else {
var dop_iz_viborki=children-max_child_count;
var one_price_child_sellected=children-dop_iz_viborki;
}
if (adults<= max_count) one_price_adult_sellected=adults;
else {
var dop_adult_iz_viborki=children-max_child_count;
var one_price_adult_sellected=adults-dop_adult_iz_viborki;
}
if (min_adults_in_acc >= one_price_adult_sellected) one_price_adult_sellected = min_adults_in_acc;
//формула просчета итоговой цены
pricePerDay = (pricePerDay * one_price_adult_sellected) + (pricePerChild * one_price_child_sellected) + (dop_adult_price+dop_child_price);
} else {
pricePerDay = pricePerDay;
}
window.rateTableTotalPrice += pricePerDay;
jq('.total_price').html(window.currencySymbol + ' ' + window.rateTableTotalPrice);
jq("#confirm_total").html(window.currencySymbol + ' ' + window.rateTableTotalPrice)
tableRow += '<td>' + window.currencySymbol + pricePerDay + '</td>';
tableRow += '</tr>';
jq('table.breakdown tbody').append(tableRow);
if (window.rateTableRowIndex == window.rateTableTotalRows) {
if (jq("table.breakdown").data('tablesorter') == null) {
jq("table.breakdown").tablesorter({
debug:true,
dateFormat: 'ddmmyyyy',
sortList: [[0,0]]
});
}
jq("table.breakdown").trigger("update");
jq("table.breakdown").trigger("sorton", [[[0,0]]]);
jq('#datepicker_loading').hide();
}
},
error: function(errorThrown){
console.log(errorThrown);
}
});
}
|
|

09.08.2014, 14:18
|
Интересующийся
|
|
Регистрация: 08.08.2014
Сообщений: 25
|
|
Может в коде что-то не там определено, типа не в том месте определены переменные?
|
|

09.08.2014, 16:09
|
Интересующийся
|
|
Регистрация: 08.08.2014
Сообщений: 25
|
|
Разумеется, вы правы, я сдурил и перепутал переменную. Но все равно у меня не работает. то есть алерты выдает верно, но условия не выполняются, даже если их переместить в функцию.
jq.ajax({
url: BYTAjax.ajaxurl,
data: dataObj,
dataType: 'json',
success:function(prices) {
var tableRow = '';
// This outputs the result of the ajax request
window.rateTableRowIndex++;
var pricePerDay = parseFloat(prices.price_per_day);
var pricePerChild = 0;
var price_per_day_dop1 = parseFloat(prices.price_per_day_dop1);
var price_per_day_dop2 = parseFloat(prices.price_per_day_dop2);
var price_per_day_dop3 = parseFloat(prices.price_per_day_dop3);
var price_per_day_dop4 = parseFloat(prices.price_per_day_dop4);
var price_per_day_dop5 = parseFloat(prices.price_per_day_dop5);
// Определяем количество доп взрослых
if (price_per_day_dop1 !=0) price_per_day_dop1_count = 1;
else price_per_day_dop1_count = 0;
if (price_per_day_dop2 !=0) price_per_day_dop2_count = 1;
else price_per_day_dop2_count = 0;
if (price_per_day_dop3 !=0) price_per_day_dop3_count = 1;
else price_per_day_dop3_count = 0;
if (price_per_day_dop4 !=0) price_per_day_dop4_count = 1;
else price_per_day_dop4_count = 0;
if (price_per_day_dop5 !=0) price_per_day_dop5_count = 1;
else price_per_day_dop5_count = 0;
Получается, что price_per_day_dop1 = 10, условие if (price_per_day_dop1 !=0) price_per_day_dop1_count = 1; а вот alert(price_per_day_dop1_count); возвращает 0, а не 1
|
|

09.08.2014, 16:20
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,598
|
|
Сообщение от Rise
|
не может такого быть чтобы:
alert(prices); // вывел 0
alert(prices.price_per_day_child_dop1); // вывел 10
|
Ну вообще - может:
prices = {
price_per_day_child_dop1: 10,
toString: function(){return 0}
}
alert(prices);
alert(prices.price_per_day_child_dop1);
но к делу це не относится.)
Sergio022, если у тебя такие проблемы, то поставь на каждой строчке alert. До условия, в условии, во время условия, после условия итд. Кому в конце концов это надо, нам или тебе?
P.S. Обычно это делается брейкпоинтами, но объяснять дольше.
__________________
29375, 35
|
|
|
|